From 77f6ce9bd03f6510da7ce301c09df4bc266b5427 Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Fri, 24 Feb 2006 08:44:34 -0700 Subject: [PATCH] [IA64] bug fix reserve_memory() reserved_region[].start is of virtual address in identity mapping. not physical address. Signed-off-by: Isaku Yamahata --- linux-2.6-xen-sparse/arch/ia64/kernel/setup.c | 9 ++++++--- linux-2.6-xen-sparse/include/asm-ia64/meminit.h | 5 +++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c index a67579cdc4..6f4595b8d0 100644 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c @@ -247,9 +247,11 @@ reserve_memory (void) n++; #ifdef CONFIG_XEN - rsvd_region[n].start = (unsigned long) (HYPERVISOR_shared_info->arch.start_info_pfn << PAGE_SHIFT); - rsvd_region[n].end = rsvd_region[n].start + PAGE_SIZE; - n++; + if (running_on_xen) { + rsvd_region[n].start = (unsigned long)__va((HYPERVISOR_shared_info->arch.start_info_pfn << PAGE_SHIFT)); + rsvd_region[n].end = rsvd_region[n].start + PAGE_SIZE; + n++; + } #endif #ifdef CONFIG_BLK_DEV_INITRD @@ -269,6 +271,7 @@ reserve_memory (void) n++; num_rsvd_regions = n; + BUG_ON(IA64_MAX_RSVD_REGIONS + 1 < n); sort_regions(rsvd_region, num_rsvd_regions); } diff --git a/linux-2.6-xen-sparse/include/asm-ia64/meminit.h b/linux-2.6-xen-sparse/include/asm-ia64/meminit.h index 46501b01a5..9a4afc3a35 100644 --- a/linux-2.6-xen-sparse/include/asm-ia64/meminit.h +++ b/linux-2.6-xen-sparse/include/asm-ia64/meminit.h @@ -17,10 +17,15 @@ * - command line string * - kernel code & data * - Kernel memory map built from EFI memory map + * - xen start info * * More could be added if necessary */ +#ifndef CONFIG_XEN #define IA64_MAX_RSVD_REGIONS 6 +#else +#define IA64_MAX_RSVD_REGIONS 7 +#endif struct rsvd_region { unsigned long start; /* virtual address of beginning of element */ -- 2.30.2